Les ACL (Access Control Lists) sous Linux
ACL (Access Control Lists) est un mécanisme permissions de fichiers disponible dans Linux.
Vous pouvez gérer des autorisations de fichiers étendues grâce aux commandes getfacl et setfacl.
Sommaire
Que sont les ACL (Access Control Lists)
getfacl : voir les ACL en place
Monter les partitions avec l'option acl
La liste de contrôle d’accès (ACL) fournit un mécanisme de permission supplémentaire et plus flexible pour les systèmes de fichiers.
Les ACL sont un deuxième niveau de permissions discrétionnaires, qui peuvent remplacer les permissions standards ugo/rwx.
Lorsqu’elles sont utilisées correctement, elles peuvent vous accorder une meilleure granularité dans la définition de l’accès à un fichier ou à un répertoire, par exemple en donnant ou en refusant l’accès à un utilisateur spécifique qui n’est ni le propriétaire du fichier, ni le propriétaire du groupe.
Il existe trois types d’entrées ACL :
•.Les entrées ACL de base sont permissions de bases UNIX. Vous pouvez modifier les permissions en utilisant chmod ou setfacl. Elles ne font pas physiquement partie de l’ACL bien que vous puissiez utiliser setfacl pour les modifier et getfacl pour les afficher
•.Les entrées ACL étendues sont des entrées ACL pour des utilisateurs ou des groupes individuels ; comme les bits de permission, elles sont stockées avec le fichier
•.Les ACL par défaut qui ne s’appliquent qu’au répertoire. Ce sont les ACL qui seront appliquées lors de la création d’un répertoire avec mkdir. Ils sont hérités du parent
Chaque type d’ACL (accès, défaut de fichier, défaut de répertoire) peut contenir jusqu’à 1024 entrées ACL étendues. Chaque entrée ACL étendue spécifie un qualificateur pour indiquer si l’entrée se rapporte à un utilisateur ou à un groupe, l’UID ou le GID lui-même, et les permissions accordées ou refusées par cette entrée. Les permissions autorisées sont la lecture, l’écriture et l’exécution.
Comme pour les autres commandes UNIX, setfacl permet l’utilisation de noms ou de nombres pour désigner les utilisateurs et les groupes.
Les ACL sont activées, mais nous ne pouvons toujours pas les modifier, pour cela nous devons installer le paquet acl :
Le plus dur est fait, nous pouvons enfin nous servir des ACL :soleil:
Il est possible que ces manipulations ne suffisent pas pour pouvoir utiliser les ACL, si vous rencontrez des problèmes avec les commandes sous-citées, rendez-vous à l'annexe "Monter les partitions avec l'option acl"
Pour ajouter une ACL, vous devez utiliser la commande setfacl avec l'option -m :
setfacl -m permissions fichierOuDossier
les permissions s'écrivent sous cette forme :
préfixe:[utilisateurOuGroupe:]droits
•.Pour le préfixe o:, il ne faut pas spécifier d'utilisateur (logique, puisque ces droits s'appliquent au reste du monde, qui n'est pas un utilisateur précis ;) )(d'où le utilisateurOuGroupe: entre crochets pour ceux qui ne connaissent pas les expressions régulières)
•.Les droits s'écrivent sous la forme d'un triplet rwx que vous devez déjà connaitre :
•.x = droit d'exécution pour les fichiers, pour les dossiers, c'est le droit "d'entrée" dans le dossier
Pour ne pas attribuer un droit, vous pouvez ne pas écrire sa lettre correspondante ou la remplacer par un tiret (r-- est équivalent à r)
... donnera les droits de lecture et d'écriture à bernard pour le fichier test.
Ajouter l'option -R permet d'appliquer des droits à tout un répertoire :
setfacl -Rm u:bernard:rw RepertoireDeTest/
... effectuera la même opération que tout à l'heure mais sur tout le dossier RepertoireDeTest
L'option -R doit être spécifiée avant l'option -m
Vous pouvez bien sur spécifier des permissions pour plusieurs utilisateurs/groupes à la fois :) , pour cela, séparez-les par une virgule :
setfacl -m u:bernard:rw,u:patrice:rwx,g:amis:r,o:--- test
setfacl permet aussi de modifier les droits classiques (comme chmod) :magicien: Il faut spécifier un nom vide :
setfacl -m u::rwx,g::r--,o:--- test
... donnera les droits rwxr----- au fichier test :)
Avec ce que je vous ai appris, si vous appliquez une ACL à un dossier, les fichiers créés ensuite dans se dossier n'hériteront pas de son ACL. Heureusement, l'héritage des ACL est possible :) , il suffit de rajouter le préfixe d: (comme default) au début de l'ACL :
setfacl -m d:u:bernard:rw RepertoireDeTest/
setfacl -m d:u:bernard:rw,o:--- RepertoireDeTest/
Dans cette ACL, seul u:bernard:rw sera un droit par défaut ; si vous souhaitez que les fichiers héritent aussi de o:---, vous devez taper :
setfacl -m d:u:bernard:rw,d:o:--- RepertoireDeTest/
Il cependant possible de se passer du préfixe d:, grâce à l'option -d, dans ce cas, toutes les permissions spécifiées seront des permissions par défaut :
setfacl -dm u:bernard:rw,o:--- RepertoireDeTest/
... aura le même effet que le code précédent.
Une fois encore, l'option -d doit être spécifiée avant l'option -m
Ajouter des droits par défaut ne modifie pas les droits existants :colere2: , si vous shouaitez ajouter une ACL à tout un répertoire et ses sous-répertoires ET que cette ACL soit héritée par la suite, vous devez le faire de cette manière : (notez la présence de l'option -R)
setfacl -Rm d:u:bernard:rwx,d:g:amis:r--,d:o:---,u:bernard:rwx,g:amis:r--,o:--- RepertoireDeTest/
Voilà ;) Vous avez fait le plus dur, il ne vous reste qu'à savoir comment enlever et visualiser les ACL.
Pour supprimer une ACL, il suffit d'utiliser l'option -b ...
... supprimera toute l'ACL du fichier test :magicien:
Vous pouvez supprimer une partie de l'ACL avec l'option -x :
setfacl -x u:patrick,g:bernard test
... supprimera les permission de l'utilisateur partick et du groupe amis du fichier test :magicien:
Pour supprimer UNIQUEMENT les autorisations par défaut, vous devez utiliser l'option -k, TOUTES les permissions par défaut seront supprimées
La commande getfacl vous permet de connaitre les ACL en place :
# file: reperoireDeTest/
# owner: op414
# group: op414
user::rwx
user:bernard:rwx
user:patrick:r--
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:bernard:rwx
default:user:patrick:r--
default:group::rwx
default:mask::rwx
default:other::---
je ne m'étends pas sur les résultats, ils sont facile à comprendre :) , hormis une notion : le masque (mask)
Le masque vous permet de savoir quelles sont les autorisations maximales accordées à un fichier ou dossier (utilisateurs et groupes confondus), les droits classiques (chmod) ne sont pas comptabilisés.
# file: test
# owner: op414
# group: op414
user::rwx
user:bernard:rwx
user:patrick:r--
group::rwx
mask::rwx
other::--
Ici, le masque est rwx car bernard possède les droits rwx.
L'utilité du masque est de pouvoir enlever des permissions à tous les utilisateurs et groupes (sauf de l'utilisateur propriétaire, dont les droits sont définis par chmod):
Vous remarquez qu'il faut utiliser le préfixe m: (comme mask). Refaisons un coup de getfacl sur le fichier :) :
# file: test
# owner: op414
# group: op414
user::rwx
user:bernard:rwx #effective:r--
user:patrick:r-- #effective:r--
group::rwx #effective:r--
mask::r--
other::---
On remarque que les droits de bernard, patrick et du groupe propriétaire n'ont pas été modifiés (ce qui permet de les rétablir en ré-augentant le masque :) ). En revanche, il est maintenant écrit #effective:r-- en face de leurs lignes. Cela signifie que leurs droits réellements appliqués sont r-- ! :soleil:
Les commandes cp et mv sont capables de conserver les ACL. Il suffit de spécifier l'option -a lors de l'utilisation de cp . mv le fait au-to-ma-ti-que-ment :-° . Bien entendu, le répertoire cible doit être situé sur une partition gérant les ACL :)
Un dernier point : quand un fichier possède une ACL et que vous faites un ls -l, l'ACL ne peut être écrite en entier ; le signe + s'affiche pour signifier le présence de l'ACL : -rw-rw----+ :)
Si vous lisez cette sous-partie, c'est que les commandes setfacl et getfacl n'ont pas fonctionné chez vous.
Ces manipulations doivent effectuées en tant qu'utilisateur root
Pour que vous puissiez utiliser les ACL, les partitions doivent êtres montées avec l'option correspondante...
# mount -t ext3 -o defaults,acl /dev/hda1/ /home
... pour monter la partition 2 du premier disque, formatée en ext3 dans le répertoire /home
Vous pouvez remonter un partition déjà montée :
Si vous voulez que le volume soit monté automatiquement avec l'option acl, vous devez modifier le fichier /etc/fstab
Vous devez rajouter ,acl dans la colonne "options" de la partition concernée :
/dev/sda1 / ext3 errors=remount-ro 0 1
/dev/sda1 / ext3 errors=remount-ro,acl 0 1
Voilà, ma partition principale sera automatiquement montée avec l'option acl au démarrage :magicien: Si vous avez une partition /home séparée, vous devez bien entendu modifier sa ligne.
Il ne vous reste plus qu'à redémarrer ou remonter les partitions concernées comme vu précédemment :)
Voici un exemple d'utilisation des ACL, il est issu de ma propre utilisation de vos nouvelles meilleures amies :)
Si vous créez un serveur web grâce à ce tuto, vous risquez d'avoir un petit problème de permissions.
En effet, votre machine ne possède que deux vrais comptes utilisateur (le votre et le compte root), si vous vous loggez en FTP, le serveur vsFTPd utilise l'uilisateur www-data. Le compte virtuel d'administration à accès à tout le répertoire /home mais ne pourra pas entrer dans votre répertoire personnel car celui-ci appartient à votre compte utilisateur et non pas à www-data :colere2:
Pour palier ce problème, il suffit d'utiliser cette ACL :
setfacl -Rm d:u:www-data:rwx,d:u:op414:rwx,u:www-data:rwx,u:op414:rwx /home/op414
... dans le cas ou votre compte utilisateur est op414
PS: Il aurait également été possible de supprimer votre compte utilisateur (A NE SURTOUT PAS FAIRE SOUS UBUNTU ET DÉRIVÉS CAR IL EST IMPOSSIBLE DE SE LOGGER EN ROOT), mais le seul moyen de se connecter en SSH à votre serveur aurait été le compte root, ce qui est dangereux car il vaut mieux empêcher la possibilité de se connecter en root via SSH pour limiter les dégâts en cas d'attaque. Il est donc préférable de garder un compte utilisateur standard :)
autoriser à "utilisateur" la lecture et l'écriture sur "fichier"
setfacl -m user:utilisateur:rw fichier
setfacl -m u:utilisateur:rw fichier
La même commande est disponible pour les groupes. Il suffit de remplacer u/user par g ou group
modifier les permissions de plusieurs utilisateurs/groupes sur "fichier" en même temps
setfacl -m user:utilisateur:rwx,user:utilisateur2:r,group:groupe:rw fichier
définir l'accès en lecture par défaut pour "utilisateur" pour les nouveaux fichiers créés dans "dossier"
setfacl -m d:u:utilisateur:r dossier
supprimer les ACL pour un utilisateur sur une arborescence
setfacl -R -x user::nom_user repertoire_base_arborescence
supprimer les ACL sur un fichier/dossier
setfacl -b fichier